public void AutoZone(OcrProgressCallback callback)
Sub AutoZone( _ByVal callback As OcrProgressCallback _)
- (BOOL)autoZone:(nullable LTOcrProgressHandler)progressHandlererror:(NSError **)error public void autoZone(OcrProgressListener callback) void AutoZone(OcrProgressCallback^ callback)
callback
Optional callback to show operation progress.
You can use the OcrProgressCallback to show the operation progress or to abort it. For more information and an example, refer to OcrProgressCallback.
The zones found by this method are added to the Zones collection of this page. Any previously added zones will be removed from Zones first.
This method finds the zone coordinates (OcrZone.Bounds which will always have units of pixels and type (OcrZone.ZoneType). The type of the zone determines its role in the page layout and can be classified into three different groups:
Note: If this IOcrPage is an empty page, in other words, when the OCR engine performs automatic page decomposing with the AutoZone method and could not find any zones in it, the Recognize method will fail with an exception. It is recommended you call AutoZone and then check if there is at least one zone found by the engine (using Zones.Count). If the count is zero, do not call Recognize.
If a recognition module is not able to recognize an object (i.e. character, or checkmark etc.), this object will be marked as a rejected one. It will become marked by a rejection symbol during conversion to the final output document. Note that IOcrDocumentManager.RejectionSymbol can be set to specify the rejection symbol used in the final document.
Note on AutoZone/Recognize and the page image: In certain cases, AutoZone and Recognize will perform image processing on the page that might result in the page being manipulated. For example, if you add a zone of type table, the engine might automatically deskew the page if required. This result in the image representation of the image to be different after AutoZone or Recognize is called. If your application has a requirement to view the image of the page, then call GetRasterImage after AutoZone or Recognize to get the latest version of the image representation of the page in case it has changed. The LEADTOOLS Main OCR C# and VB demos do exactly that.
This example will perform auto-zoning on an OCR page then displays information about the zones found.
using Leadtools;using Leadtools.Codecs;using Leadtools.Ocr;using Leadtools.Forms.Common;using Leadtools.Document.Writer;using Leadtools.WinForms;using Leadtools.Drawing;using Leadtools.ImageProcessing;using Leadtools.ImageProcessing.Color;public void OcrAutoZoneExample(){// Create an image with some text in itRasterImage image = new RasterImage(RasterMemoryFlags.Conventional, 320, 200, 24, RasterByteOrder.Bgr, RasterViewPerspective.TopLeft, null, IntPtr.Zero, 0);Rectangle imageRect = new Rectangle(0, 0, image.ImageWidth, image.ImageHeight);IntPtr hdc = RasterImagePainter.CreateLeadDC(image);using (Graphics g = Graphics.FromHdc(hdc)){g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;g.FillRectangle(Brushes.White, imageRect);using (Font f = new Font("Arial", 20, FontStyle.Regular))g.DrawString("Normal line", f, Brushes.Black, 0, 0);using (Font f = new Font("Courier New", 20, FontStyle.Regular))g.DrawString("Monospaced line", f, Brushes.Black, 0, 80);}RasterImagePainter.DeleteLeadDC(hdc);string zonesFileName = Path.Combine(LEAD_VARS.ImagesDir, "MyZones.xml");// Create an instance of the engineusing (IOcrEngine ocrEngine = OcrEngineManager.CreateEngine(OcrEngineType.LEAD)){// Start the engine using default parametersocrEngine.Startup(null, null, null, LEAD_VARS.OcrLEADRuntimeDir);// Create an OCR pageusing (IOcrPage ocrPage = ocrEngine.CreatePage(image, OcrImageSharingMode.AutoDispose)){// Show the zones, there should be no zones yetShowZones("Right after the page was created", ocrPage);// Perform default AutoZoning on the pageocrPage.AutoZone(null);// Show the zones, there should be two zones, one for each lineShowZones("AutoZone with default parameters", ocrPage);// Update the first zone manuallyOcrZone ocrZone = ocrPage.Zones[0];ocrZone.ZoneType = OcrZoneType.Text;ocrPage.Zones[0] = ocrZone;// Show the zonesShowZones("After updating the type of the first zone", ocrPage);// Save the zones to a file and then clear themocrPage.SaveZones(zonesFileName);ocrPage.Zones.Clear();// Show the zones, there should be no zones since we just cleared themShowZones("After calling save and clear", ocrPage);// Re-load the zonesocrPage.LoadZones(zonesFileName);ShowZones("After re-loading the zones", ocrPage);}// Shutdown the engine// Note: calling Dispose will also automatically shutdown the engine if it has been startedocrEngine.Shutdown();}}private void ShowZones(string message, IOcrPage ocrPage){Console.WriteLine("Zones after {0}:", message);foreach (OcrZone ocrZone in ocrPage.Zones){int index = ocrPage.Zones.IndexOf(ocrZone);Console.WriteLine("Zone index: {0}", index);Console.WriteLine(" Id {0}", ocrZone.Id);Console.WriteLine(" Bounds {0}", ocrZone.Bounds);Console.WriteLine(" ZoneType {0}", ocrZone.ZoneType);Console.WriteLine(" CharacterFilters: {0}", ocrZone.CharacterFilters);Console.WriteLine("----------------------------------");}Console.WriteLine("Hit enter to continue");//Console.ReadLine();}static class LEAD_VARS{public const string ImagesDir = @"C:\LEADTOOLS21\Resources\Images";public const string OcrLEADRuntimeDir = @"C:\LEADTOOLS21\Bin\Common\OcrLEADRuntime";}
Imports LeadtoolsImports Leadtools.CodecsImports Leadtools.OcrImports Leadtools.FormsImports Leadtools.Document.WriterImports Leadtools.WinFormsImports Leadtools.DrawingImports Leadtools.ImageProcessingImports Leadtools.ImageProcessing.ColorPublic Sub OcrAutoZoneExample()' Create an image with some text in itDim image As New RasterImage(RasterMemoryFlags.Conventional, 320, 200, 24, RasterByteOrder.Bgr, RasterViewPerspective.TopLeft,Nothing, IntPtr.Zero, 0)Dim imageRect As New Rectangle(0, 0, image.ImageWidth, image.ImageHeight)Dim hdc As IntPtr = RasterImagePainter.CreateLeadDC(image)Using g As Graphics = Graphics.FromHdc(hdc)g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQualityg.FillRectangle(Brushes.White, imageRect)Using f As New Font("Arial", 20, FontStyle.Regular)g.DrawString("Normal line", f, Brushes.Black, 0, 0)End UsingUsing f As New Font("Courier New", 20, FontStyle.Regular)g.DrawString("Monospaced line", f, Brushes.Black, 0, 80)End UsingEnd UsingRasterImagePainter.DeleteLeadDC(hdc)Dim zonesFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "MyZones.xml")' Create an instance of the engineUsing ocrEngine As IOcrEngine = OcrEngineManager.CreateEngine(OcrEngineType.LEAD)' Start the engine using default parametersocrEngine.Startup(Nothing, Nothing, Nothing, LEAD_VARS.OcrLEADRuntimeDir)' Create an OCR pageUsing ocrPage As IOcrPage = ocrEngine.CreatePage(image, OcrImageSharingMode.AutoDispose)' Show the zones, there should be no zones yetShowZones("Right after the page was created", ocrPage)' Perform default AutoZoning on the pageocrPage.AutoZone(Nothing)' Show the zones, there should be two zones, one for each lineShowZones("AutoZone with default parameters", ocrPage)' Update the first zone manuallyDim ocrZone As OcrZone = ocrPage.Zones(0)ocrZone.ZoneType = OcrZoneType.TextocrPage.Zones(0) = ocrZone' Show the zonesShowZones("After updating the type of the first zone", ocrPage)' Save the zones to a file and then clear themocrPage.SaveZones(zonesFileName)ocrPage.Zones.Clear()' Show the zones, there should be no zones since we just cleared themShowZones("After calling save and clear", ocrPage)' Re-load the zonesocrPage.LoadZones(zonesFileName)ShowZones("After re-loading the zones", ocrPage)End Using' Shutdown the engine' Note: calling Dispose will also automatically shutdown the engine if it has been startedocrEngine.Shutdown()End UsingEnd SubPrivate Sub ShowZones(message As String, ocrPage As IOcrPage)Console.WriteLine("Zones after {0}:", message)For Each ocrZone As OcrZone In ocrPage.ZonesDim index As Integer = ocrPage.Zones.IndexOf(ocrZone)Console.WriteLine("Zone index: {0}", index)Console.WriteLine(" Id {0}", ocrZone.Id)Console.WriteLine(" Bounds {0}", ocrZone.Bounds)Console.WriteLine(" ZoneType {0}", ocrZone.ZoneType)Console.WriteLine(" CharacterFilters: {0}", ocrZone.CharacterFilters)Console.WriteLine("----------------------------------")NextConsole.WriteLine("Hit enter to continue")Console.ReadLine()End SubPublic NotInheritable Class LEAD_VARSPublic Const ImagesDir As String = "C:\LEADTOOLS21\Resources\Images"Public Const OcrLEADRuntimeDir As String = "C:\LEADTOOLS21\Bin\Common\OcrLEADRuntime"End Class
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document
